# !/usr/bin/env python
# -*- coding: utf-8 -*-

# 请确保你的 DataFrame 包含一个名为 Label 的列, 这是 Species(品种) 的列。
# 如果 label 是字符串类型的分类特征, 你可能需要使用 StringIndexer 进行索引。
'''
任务类型: 随机森林回归主要用于回归任务。在回归任务中, 算法试图预测一个连续的数值输出, 而不是一个离散的类别。
输出: 随机森林回归的输出是一个连续的数值, 表示输入数据的预测结果。
算法原理: 随机森林回归同样基于决策树, 但在回归任务中, 每个决策树的输出是一个实数值。最终的预测结果是多个决策树输出的平均值或加权平均值。

字段说明: SepalLength(花萼长度), SepalWidth(花萼宽度), PetalLength(花瓣长度), PetalWidth(花瓣宽度), Species(品种).

品种说明: Setosa(山鸢尾), Versicolor(变色鸢尾), Virginical(维吉尼亚鸢尾).
'''
'''
跨平台生成模型，java调用预测

https://zhuanlan.zhihu.com/p/435694136
'''
from jpmml_evaluator import make_evaluator

if __name__ == '__main__':
    evaluator = make_evaluator("../out/model.pmml").verify()

    input_fields = evaluator.getInputFields()
    print("\r\nInput fields: " + str([input_field.getName() for input_field in input_fields]))

    target_fields = evaluator.getTargetFields()
    print("\r\nTarget field(s): " + str([target_field.getName() for target_field in target_fields]))

    output_fields = evaluator.getOutputFields()
    print("\r\nOutput fields: " + str([output_field.getName() for output_field in output_fields]))

    """
    SepalLength,SepalWidth,PetalLength,PetalWidth,Species
    6.4,2.8,5.6,2.2,Virginical
    """

    args = {
        "SepalLength": 6.4,
        "SepalWidth": 2.8,
        "PetalLength": 5.6,
        "PetalWidth": 2.2
    }

    result = evaluator.evaluate(args)

    print('\r\n', result)
